Software for data networking is often organized into three layers: a forwarding plane, a control plane, and a management plane. The forwarding plane, which is responsible for progressing user data traffic, receives packets, parses packet headers, and uses the information from the packet headers along with its local state information to determine how to forward the packets. The forwarding plane includes software that receives local state information from the control plane, and programs the local state information in the hardware or software forwarding path. The control plane consists of protocols and applications that exchange and receive abstracted state information between different data networking systems. The management plane allows users and management systems to allocate networking system resources, selecting between different possible networking equipment behaviors.